<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>MOS Technology VIC-II</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/MOS_Technology_VIC-II"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-MOS_Technology_VIC-II rootpage-MOS_Technology_VIC-II skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">MOS Technology VIC-II</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><style data-mw-deduplicate="TemplateStyles:r1251242444">
/* start https://en.wikipedia.org/ */
.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style>
<p>The <b>VIC-II</b> (<b>Video Interface Chip II</b>), specifically known as the <a href="MOS_Technology" title="MOS Technology">MOS Technology</a> 6567/6566/8562/8564 (<a href="NTSC" title="NTSC">NTSC</a> versions), 6569/8565/8566 (<a href="PAL" title="PAL">PAL</a>), is the <a href="Integrated_circuit" title="Integrated circuit">microchip</a> tasked with generating <a href="S-Video" title="S-Video">Y/C</a> video signals (combined to <a href="Composite_video" title="Composite video">composite video</a> in the <a href="RF_modulator" title="RF modulator">RF modulator</a>) and <a href="Dynamic_random_access_memory" class="mw-redirect" title="Dynamic random access memory">DRAM</a> <a href="Memory_refresh" title="Memory refresh">refresh</a> signals in the <a href="Commodore_64" title="Commodore 64">Commodore 64</a> and <a href="Commodore_128" title="Commodore 128">Commodore 128</a> <a href="Home_computer" title="Home computer">home computers</a>.
</p><p>Succeeding the original <a href="MOS_Technology_VIC" title="MOS Technology VIC">MOS Technology VIC</a> used in the <a href="VIC-20" title="VIC-20">VIC-20</a>, the VIC-II was one of the key custom chips in the Commodore 64 (the other being the <a href="MOS_Technology_6581" title="MOS Technology 6581">MOS Technology 6581</a> sound chip).
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Development_history">Development history</h2></div>
<p>The VIC-II chip was designed primarily by Albert Charpentier and Charles Winterble<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> at <a href="MOS_Technology" title="MOS Technology">MOS Technology, Inc.</a> as a successor to the <a href="MOS_Technology_VIC" title="MOS Technology VIC">MOS Technology 6560 "VIC"</a>. The team at MOS Technology had previously failed to produce two graphics chips named <i>MOS Technology 6562</i> for the Commodore TOI computer, and <i>MOS Technology 6564</i> for the Color PET, due to memory speed constraints.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p><p>In order to construct the VIC-II, Charpentier and Winterble made a market survey of current <a href="Home_computer" title="Home computer">home computers</a> and <a href="Video_game" title="Video game">video games</a>, listing up the current features, and what features they wanted to have in the VIC-II. The idea of adding sprites came from the <a href="TI-99/4A" title="TI-99/4A">TI-99/4A</a> computer and its <a href="Texas_Instruments_TMS9918" class="mw-redirect" title="Texas Instruments TMS9918">TMS9918</a> <a href="Video_Display_Controller" class="mw-redirect" title="Video Display Controller">graphics coprocessor</a>. The idea to support <a href="Collision_detection" title="Collision detection">collision detection</a> came from the <a href="Intellivision" title="Intellivision">Mattel Intellivision</a>. The <a href="Atari_8-bit_computers" title="Atari 8-bit computers">Atari 800</a> was also mined for desired features, particularly bitmap mode, which was a desired goal of the MOS team as all of Commodore's principal home computer rivals had bitmap graphics while the VIC-20 only had redefinable characters.<sup id="cite_ref-IEEE1985_3-0" class="reference"><a href="#cite_note-IEEE1985-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> About 3/4 of the chip surface is used for the sprite functionality.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>
</p><p>The chip was partly laid out using <a href="Electronic_design_automation" title="Electronic design automation">electronic design automation</a> tools from <i>Applicon</i> (now a part of <a href="UGS_Corp." title="UGS Corp.">UGS Corp.</a>), and partly laid out manually on <a href="Vellum#Paper_vellum" title="Vellum">vellum paper</a>. The design was partly debugged by fabricating chips containing small subsets of the design, which could then be tested separately. This was easy since MOS Technology had both its <a href="Research_and_development" title="Research and development">research and development</a> lab and semiconductor plant at the same location. The initial batch of test chips came out almost fully functional, with only one bad sprite.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> The chip was developed in 5 micrometer technology.<sup id="cite_ref-IEEE1985_3-1" class="reference"><a href="#cite_note-IEEE1985-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p><p>The work on the VIC-II was completed in November 1981 while <a href="Robert_Yannes" class="mw-redirect" title="Robert Yannes">Robert Yannes</a> was simultaneously working on the <a href="MOS_Technology_SID" class="mw-redirect" title="MOS Technology SID">SID</a> chip. Both chips, like the <a href="Commodore_64" title="Commodore 64">Commodore 64</a>, were finished in time for the <a href="Consumer_Electronics_Show" class="mw-redirect" title="Consumer Electronics Show">Consumer Electronics Show</a> in the first weekend of January 1982.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="VIC-II_features">VIC-II features</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1244412712">
/* start https://en.wikipedia.org/ */
.mw-parser-output .templatequote{overflow:hidden;margin:1em 0;padding:0 32px}.mw-parser-output .templatequotecite{line-height:1.5em;text-align:left;margin-top:0}@media(min-width:500px){.mw-parser-output .templatequotecite{padding-left:1.6em}}
/* end https://en.wikipedia.org/ */
</style><blockquote class="templatequote"><p>Some of the graphics modes on the 64 are really strange, and they have no analogs to the Atari or Apple, like the ability to change color of the character basis across the screen. That gave us a lot of color capability that had not been exploited.</p></blockquote><div class="templatequotecite"><p style="display: inline; padding-left: 2.3em;">— Craig Nelson of Epyx, 1986<sup id="cite_ref-Yakal198606_8-0" class="reference"><a href="#cite_note-Yakal198606-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup></p></div>
<ul><li>16 <a href="Kilobyte" title="Kilobyte">kB</a> <a href="Address_space" title="Address space">address space</a> for screen, character and sprite memory</li>
<li>320 × 200 pixels video resolution (160 × 200 in multi-color mode)</li>
<li>40 × 25 characters text resolution</li>
<li>Three character display modes and two bitmap modes</li>
<li>16 colors</li>
<li>Concurrent handling of 8 <a href="Sprite_(computer_science)" class="mw-redirect" title="Sprite (computer science)">sprites</a> per <a href="Scanline" class="mw-redirect" title="Scanline">scanline</a>, each of 24 × 21 pixels (12 × 21 multicolor)</li>
<li><a href="Raster_interrupt" title="Raster interrupt">Raster interrupt</a> (see details, below)</li>
<li>Smooth <a href="Scrolling" title="Scrolling">scrolling</a></li>
<li>Independent dynamic <a href="Memory_refresh" title="Memory refresh">RAM refresh</a></li>
<li><a href="Bus_mastering" title="Bus mastering">Bus mastering</a> for a 6502-style <a href="Computer_bus" class="mw-redirect" title="Computer bus">system bus</a>; CPU and VIC-II accessing the bus during alternating half-<a href="Clock_cycle" class="mw-redirect" title="Clock cycle">clock cycles</a> (the VIC-II will halt the CPU when it needs extra cycles)</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Technical_details">Technical details</h2></div>
<p>Note that below register addresses are stated as seen by CPU in a C64. To yield the register numbers as usually given in data sheets (i. e. starting with 0), the leading "D0" should be omitted.
</p>
<div class="mw-heading mw-heading3"><h3 id="Programming">Programming</h3></div>
<p>The VIC-II is programmed by manipulating its 47 control registers (up from 16 in the VIC), memory mapped to the range <style data-mw-deduplicate="TemplateStyles:r886049734">
/* start https://en.wikipedia.org/ */
.mw-parser-output .monospaced{font-family:monospace,monospace}
/* end https://en.wikipedia.org/ */
</style><span class="monospaced">$D000</span>–<span class="monospaced">$D02E</span> in the C64 address space. Of all these registers, 34 deal exclusively with <a href="Sprite_(computer_graphics)" title="Sprite (computer graphics)">sprite</a> control (sprites being called MOBs, from "Movable Object Blocks", in the VIC-II documentation). Like its predecessor, the VIC-II handles <a href="Light_pen" title="Light pen">light pen</a> input, and with help from the C64's standard character ROM, provided the original <a href="PETSCII" title="PETSCII">PETSCII</a> character set from 1977 on a similarly dimensioned display as the 40-column <a href="Commodore_PET" title="Commodore PET">PET</a> series.
</p><p>By reloading the VIC-II's control registers via machine code hooked into the <a href="Raster_interrupt" title="Raster interrupt">raster interrupt</a> routine (the scanline interrupt), one can program the chip to generate significantly more than 8 concurrent sprites (a process known as <a href="Sprite_multiplexing" title="Sprite multiplexing">sprite multiplexing</a>), and generally give every program-defined slice of the screen different scrolling, resolution and color properties. The hardware limitation of 8 sprites per scanline can be increased further by letting the sprites flicker rapidly on and off. Mastery of the raster interrupt is essential in order to unleash the VIC-II's capabilities. Many <a href="Demo_(computer_programming)" class="mw-redirect" title="Demo (computer programming)">demos</a> and some later games would establish a fixed "lock-step" between the CPU and the VIC-II so that the VIC registers could be manipulated at exactly the right moment, but the reliance on raster interrupts to ensure proper synchronization could be reduced and their overhead minimized.
</p>
<div class="mw-heading mw-heading3"><h3 id="Character_graphics">Character graphics</h3></div>
<p>The C64 shipped with the PETSCII character set in a 4k ROM, but, like the VIC-20 before it, the actual data for the characters was read from memory at a specified location. This location is one of the VIC-II registers, which allowed programmers to construct their own characters sets by placing the appropriate data in memory; each character is an 8x8 grid, a byte representing 8 bits horizontally, so 8 bytes are required for a single character and thus the complete 256-character set uses a total of 2,048 bytes. Theoretically as many as eight character sets can be used if the entire 16k of video memory were filled.<sup id="cite_ref-map128_9-0" class="reference"><a href="#cite_note-map128-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page: 363">: 363 </span></sup>
</p><p>In addition to charsets, the VIC-II also uses 1000 bytes to store the 25 lines of 40 characters per line, one byte for each character, which in power on default configuration sits at <span class="monospaced">$400</span>-<span class="monospaced">$7E8</span>.<sup id="cite_ref-map128_9-1" class="reference"><a href="#cite_note-map128-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Pages: 117–119">: 117–119 </span></sup> Color RAM is accessed as bits 8 to 11 of the video matrix;<sup id="cite_ref-vicspec_10-0" class="reference"><a href="#cite_note-vicspec-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup> in the 64 and 128, it is located in I/O space at <span class="monospaced">$D800</span>-<span class="monospaced">$DBFF</span> and cannot be moved from that location. It contains the values for color 1 (color 3 in multicolor mode) of each character.
</p><p>The character ROM is mapped into two of the VIC-II's four "windows", at <span class="monospaced">$1000</span>-<span class="monospaced">$1FFF</span> and <span class="monospaced">$9000</span>-<span class="monospaced">$9FFF</span>, although the CPU cannot see it there (the character ROM may be switched into <span class="monospaced">$D000</span>-<span class="monospaced">$DFFF</span> where it is visible to the CPU, but not the VIC-II). Thus graphics data or video buffers cannot be placed at <span class="monospaced">$1000</span>-<span class="monospaced">$1FFF</span> or <span class="monospaced">$9000</span>-<span class="monospaced">$9FFF</span> because the VIC-II will see the character ROM there instead. Because these areas of RAM could not be used by the VIC-II graphics chip, they were frequently used for music/sound effects (the SID chip). The C64 has the ability to have RAM and ROM at the same address in memory but the CPU would "see" one and the VIC-II chip would "see" the other.
</p><p>In default high-resolution character mode, the foreground of each character may be set individually in the color RAM. In multicolor character mode, color 3 is limited to the first eight possible color values; the fourth bit is then used as a flag indicating if this character is to be displayed in high-resolution or multicolor, thus making it possible to mix both types on one screen.<sup id="cite_ref-map128_9-2" class="reference"><a href="#cite_note-map128-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Pages: 460–462">: 460–462 </span></sup> Colors 1 and 2 are set by the registers at <span class="monospaced">$D022</span> and <span class="monospaced">$D023</span> and are global for all characters.<sup id="cite_ref-map128_9-3" class="reference"><a href="#cite_note-map128-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page: 373">: 373 </span></sup>
</p><p>If Extended Background Color Mode is used, the upper two bits of the character code are used to select one of four background color registers. This allows four different background colors on the screen, but at the expense of only allowing 64 different characters instead of 256. Because this is limiting, games seldom used it.
</p>
<div class="mw-heading mw-heading3"><h3 id="Bitmap_mode">Bitmap mode</h3></div>
<p>Adding an all-points-addressable bitmap mode was one of the Commodore design team's primary goals, as the VIC-I lacked such a feature. However, in order to use as little additional circuitry as possible, they organized it in the same manner as character mode, i.e. 8x8 and 4x8 tiles. Bitmap graphics require an 8k page for the pixel data and each byte corresponds to one row of eight or four pixels. The next byte is the row underneath it and after the 8th row, returning to the top of the next tile.
</p><p>In hi-res bitmaps, screen RAM is used to hold the foreground and background colors of each tile (high and low nibble of each byte). This is the only VIC-II mode that does not make any use of the color RAM at <span class="monospaced">$D800</span> or the background color register at <span class="monospaced">$D021</span>.
</p><p>Multicolor bitmap mode allows three colors per tile (the fourth is the background color as set in <span class="monospaced">$D021</span>). Colors 1 and 2 are selected by the bits in screen RAM (same as hires bitmaps) and the third is from color RAM.
</p><p>Despite the high level of color detail and all-points-addressable capabilities of bitmap mode, it is generally impractical for in-game graphics due to requiring a high amount of system resources (8k for the pixel data plus considerable more CPU cycles to modify each tile) and normally cannot be scrolled. Thus, it is most commonly seen on loader and sometimes title screens.
</p>
<div class="mw-heading mw-heading3"><h3 id="Sprites">Sprites</h3></div>
<p>VIC-II sprites are either 24x21 monochrome or 12x21 multicolor. Similar to character graphics, the latter have one individual color for each sprite and two global ones. VIC-II has eight sprites, each of which uses 64 bytes of memory to store but, with certain limitations, it can display many more. Sprite multiplexing is a common method of getting more than eight on screen (although there still is a maximum of eight per scan line). The VIC-II scanline counter can be polled until the desired point is reached on screen, or a raster interrupt can be programmed to trigger at a certain scanline, after which the program quickly changes the sprite coordinates. This method can result in many additional sprites onscreen at once, often for a total of 16 to 24 or more. For a demo, though, the limit is considerably more flexible.
</p><p>In theory the maximum number of different sprites visible at the same time is 256 (assuming the VIC-II's entire 16k page was filled). They are addressed by using a block number to refer to each sprite pattern in memory beginning with 0 and going to 255 ($FF) depending on their position in the video page. (if the second video bank (numbered as 0 1 2 and 3) is used, Block 0 would refer to the sprite stored at <span class="monospaced">$4000</span> and Block 255 would be at <span class="monospaced">$7FC0</span>).
</p><p>Each sprite may be double-sized vertically, horizontally or both. This does not increase the sprite resolution (it is still 24 pixels wide and 21 tall) but each pixel will be twice as wide and/or twice as tall.
</p><p>Because the horizontal position register for each sprite is one byte and limited to a maximum value of 255, it alone cannot cover the entire 320 pixels of the VIC-II's screen area, so an additional register called the Most Significant Byte Flag provides a 9th position bit for all sprites.
</p><p><span class="monospaced">$D01E</span> and <span class="monospaced">$D01F</span> contain the Background and Sprite-to-Sprite Collision registers. The former is rarely used because it cannot provide information on the specific background object the sprite is touching.
</p><p><span class="monospaced">$D01B</span> contains the Sprite To Background priority register, which is used to govern whether a sprite moves behind or in front of background graphics. When a sprite enters the same space as another sprite, the lower-numbered ones will always pass over the higher numbered ones.
</p>
<div class="mw-heading mw-heading3"><h3 id="Scrolling">Scrolling</h3></div>
<p>In order to scroll a character screen, the VIC-II is set to 38-column and/or 24-line mode via the registers at <span class="monospaced">$D011</span> and <span class="monospaced">$D016</span>. This creates an off-screen buffer where the row of characters to be scrolled is placed. By adjusting the scroll bits in the above-mentioned registers, one row may be moved on-screen after which it repeats unless a new row is put in the buffer. Color RAM is scrolled simultaneous with screen RAM and works the same way.
</p><p>VIC-II scrolling is a relatively complicated, CPU intensive task, although it is not uncommon for C64 game programmers to cheat by designing graphics so that the color RAM can remain static. Another standard trick is to use a section of the screen (perhaps the bottom or top 4 or 5 character rows) as a game status area to display score, lives, etc. reducing the amount of scrolling that has to be performed. Finally, it is often necessary to use the "double-buffering" technique to prevent screen tearing. Two 1k blocks of screen ram are reserved; one is displayed while another is written to, then during vblank they are quickly swapped through manipulation of the VIC-II registers. Unfortunately this cannot be done with color RAM.
</p><p>Late in the C64's commercial lifespan, an exploit known as VSP (Variable Screen Positioning) was discovered that involved manipulation of the control bits in <span class="monospaced">$D011</span> to produce fast scrolling at a much lower CPU cycle cost than the standard scroll registers, however it required careful, cycle-exact coding and did not work reliably on some VIC-II revisions; also it can only be used for horizontal scrolling. It is notably used in <i><a href="Mayhem_in_Monsterland" title="Mayhem in Monsterland">Mayhem in Monsterland</a></i>.
</p>
<div class="mw-heading mw-heading3"><h3 id="Raster_interrupts">Raster interrupts</h3></div>
<p>Utilization of raster interrupts is an essential part of C64 game programming. In the computer's power-on default state, the first <a href="MOS_Technology_CIA" title="MOS Technology CIA">MOS Technology CIA</a> chip generates a <a href="Interrupts_in_65xx_processors" title="Interrupts in 65xx processors">maskable interrupt</a> (IRQ) 60 times per second (whether NTSC or PAL, this is unrelated to video refresh) which sends the CPU to the kernel IRQ handler at <span class="monospaced">$EA31</span>. The handler acknowledges the CIA's IRQ, updates the clock, scans the keyboard, and blinks the cursor in BASIC.
</p><p>Games normally disable the CIA's interrupt and instead set up the VIC-II to generate interrupts when a specific scanline is reached, which is necessary for split-screen scrolling and playing music. The game remaps the <a href="Interrupt_vector" class="mw-redirect" title="Interrupt vector">IRQ vector</a> at <span class="monospaced">$0314</span>/<span class="monospaced">$0315</span> to its raster handler which performs these functions and then optionally executes a JMP <span class="monospaced">$EA31</span> instruction to return control to the kernel.
</p><p>Some games use only one IRQ; however, chained IRQs are more common and improve program stability. In this setup, the IRQ is remapped to the second routine and so forth for each one until the last one restores it to the address of the first IRQ. When chained IRQs are used, only one JMP <span class="monospaced">$EA31</span> instruction is needed in the chain and the others can be ended with JMP <span class="monospaced">$EA81</span>, which simply goes to the end of the kernel handler. Also it is not uncommon for games to switch out the kernal and use their own IRQ handler instead. The NMI can be used for an additional interrupt thread, although undesirable side effects can result from accidentally pressing the Restore key as it triggers an NMI if pressed.
</p><p>The VIC-II may also generate a raster interrupt from the collision registers, but this feature is rarely used as it provides insufficient information to the program in most cases.
</p>
<div class="mw-heading mw-heading3"><h3 id="Memory_mapping">Memory mapping</h3></div>
<p>The VIC-II has a 14-bit address bus and can use any of the four 16k segments of the C64's memory space for video data. To manage this, two additional address bits are contributed by port bits of CIA. <span class="monospaced">$0000</span>-<span class="monospaced">$3FFF</span> is the power-on default. The second segment (<span class="monospaced">$4000</span>–<span class="monospaced">$7FFF</span>) is typically the best choice for programming from BASIC as it is the only segment that is completely free RAM with no ROMs or I/O registers mapped into it. The fourth segment (<span class="monospaced">$C000</span>–<span class="monospaced">$FFFF</span>) is also a good choice provided that machine language is used, as the kernel ROMs must be disabled to gain read access by the CPU, and it avoids having discontiguous program code and data that would result from using <span class="monospaced">$4000</span>-<span class="monospaced">$7FFF</span>. Note that graphics data may be freely stored underneath the BASIC ROM at <span class="monospaced">$A000</span>-<span class="monospaced">$BFFF</span>, the kernel ROM at <span class="monospaced">$E000</span>-<span class="monospaced">$FFFF</span> or I/O registers and color RAM at <span class="monospaced">$D000</span>–<span class="monospaced">$DFFF</span>, since the VIC-II only sees RAM, regardless of how the CPU memory mapping is adjusted; character ROM is visible only in the first and third segment, thus if segment two or four is used, the programmer must supply his own character data. The screen RAM, bitmap page, sprites, and character sets must all occupy the same segment window (provided the CIA bits aren't changed via scanline interrupt). The last six bytes of system memory (<span class="monospaced">$FFFA</span>-<span class="monospaced">$FFFF</span>) contain the IRQ, NMI, and reset vectors so if the top of memory is used to store a character set or sprite data, and the KERNAL ROM is switched out revealing the RAM underneath to the CPU, it will be necessary to sacrifice one character or sprite to avoid overwriting the vectors.
</p>
<div class="mw-heading mw-heading3"><h3 id="Registers">Registers</h3></div>
<p>The VIC-II has 47 read/write registers listed below:
</p>
<table class="wikitable">
<tbody><tr>
<th>Register
</th>
<th>Hexadecimal
</th>
<th>Bit 7
</th>
<th>Bit 6
</th>
<th>Bit 5
</th>
<th>Bit 4
</th>
<th>Bit 3
</th>
<th>Bit 2
</th>
<th>Bit 1
</th>
<th>Bit 0
</th>
<th>Description
</th></tr>
<tr>
<td><div class="center">0</div>
</td>
<td><div class="center">D000</div>
</td>
<td colspan="8">
<div class="center">M0X</div>
</td>
<td>X Coordinate Sprite 0
</td></tr>
<tr>
<td><div class="center">1</div>
</td>
<td><div class="center">D001</div>
</td>
<td colspan="8">
<div class="center">M0Y</div>
</td>
<td>Y Coordinate Sprite 0
</td></tr>
<tr>
<td><div class="center">2</div>
</td>
<td><div class="center">D002</div>
</td>
<td colspan="8">
<div class="center">M1X</div>
</td>
<td>X Coordinate Sprite 1
</td></tr>
<tr>
<td><div class="center">3</div>
</td>
<td><div class="center">D003</div>
</td>
<td colspan="8">
<div class="center">M1Y</div>
</td>
<td>Y Coordinate Sprite 1
</td></tr>
<tr>
<td><div class="center">4</div>
</td>
<td><div class="center">D004</div>
</td>
<td colspan="8">
<div class="center">M2X</div>
</td>
<td>X Coordinate Sprite 2
</td></tr>
<tr>
<td><div class="center">5</div>
</td>
<td><div class="center">D005</div>
</td>
<td colspan="8">
<div class="center">M2Y</div>
</td>
<td>Y Coordinate Sprite 2
</td></tr>
<tr>
<td><div class="center">6</div>
</td>
<td><div class="center">D006</div>
</td>
<td colspan="8">
<div class="center">M3X</div>
</td>
<td>X Coordinate Sprite 3
</td></tr>
<tr>
<td><div class="center">7</div>
</td>
<td><div class="center">D007</div>
</td>
<td colspan="8">
<div class="center">M3Y</div>
</td>
<td>Y Coordinate Sprite 3
</td></tr>
<tr>
<td><div class="center">8</div>
</td>
<td><div class="center">D008</div>
</td>
<td colspan="8">
<div class="center">M4X</div>
</td>
<td>X Coordinate Sprite 4
</td></tr>
<tr>
<td><div class="center">9</div>
</td>
<td><div class="center">D009</div>
</td>
<td colspan="8">
<div class="center">M4Y</div>
</td>
<td>Y Coordinate Sprite 4
</td></tr>
<tr>
<td><div class="center">10</div>
</td>
<td><div class="center">D00A</div>
</td>
<td colspan="8">
<div class="center">M5X</div>
</td>
<td>X Coordinate Sprite 5
</td></tr>
<tr>
<td><div class="center">11</div>
</td>
<td><div class="center">D00B</div>
</td>
<td colspan="8">
<div class="center">M5Y</div>
</td>
<td>Y Coordinate Sprite 5
</td></tr>
<tr>
<td><div class="center">12</div>
</td>
<td><div class="center">D00C</div>
</td>
<td colspan="8">
<div class="center">M6X</div>
</td>
<td>X Coordinate Sprite 6
</td></tr>
<tr>
<td><div class="center">13</div>
</td>
<td><div class="center">D00D</div>
</td>
<td colspan="8">
<div class="center">M6Y</div>
</td>
<td>Y Coordinate Sprite 6
</td></tr>
<tr>
<td><div class="center">14</div>
</td>
<td><div class="center">D00E</div>
</td>
<td colspan="8">
<div class="center">M7X</div>
</td>
<td>X Coordinate Sprite 7
</td></tr>
<tr>
<td><div class="center">15</div>
</td>
<td><div class="center">D00F</div>
</td>
<td colspan="8">
<div class="center">M7Y</div>
</td>
<td>Y Coordinate Sprite 7
</td></tr>
<tr>
<td><div class="center">16</div>
</td>
<td><div class="center">D010</div>
</td>
<td>M7X8
</td>
<td>M6X8
</td>
<td>M5X8
</td>
<td>M4X8
</td>
<td>M3X8
</td>
<td>M2X8
</td>
<td>M1X8
</td>
<td>M0X8
</td>
<td>MSBs of X coordinates
</td></tr>
<tr>
<td><div class="center">17</div>
</td>
<td><div class="center">D011</div>
</td>
<td>RST8
</td>
<td>ECM
</td>
<td>BMM
</td>
<td>DEN
</td>
<td>RSEL
</td>
<td colspan="3">
<div class="center">YSCROLL</div>
</td>
<td>Control register 1
</td></tr>
<tr>
<td><div class="center">18</div>
</td>
<td><div class="center">D012</div>
</td>
<td colspan="8">
<div class="center">RST</div>
</td>
<td>Raster counter
</td></tr>
<tr>
<td><div class="center">19</div>
</td>
<td><div class="center">D013</div>
</td>
<td colspan="8">
<div class="center">LPX</div>
</td>
<td>Light Pen X
</td></tr>
<tr>
<td><div class="center">20</div>
</td>
<td><div class="center">D014</div>
</td>
<td colspan="8">
<div class="center">LPY</div>
</td>
<td>Light Pen Y
</td></tr>
<tr>
<td><div class="center">21</div>
</td>
<td><div class="center">D015</div>
</td>
<td>M7E
</td>
<td>M6E
</td>
<td>M5E
</td>
<td>M4E
</td>
<td>M3E
</td>
<td>M2E
</td>
<td>M1E
</td>
<td>M0E
</td>
<td>Sprite enabled
</td></tr>
<tr>
<td><div class="center">22</div>
</td>
<td><div class="center">D016</div>
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td>RES
</td>
<td>MCM
</td>
<td>CSEL
</td>
<td colspan="3">
<div class="center">XSCROLL</div>
</td>
<td>Control register 2
</td></tr>
<tr>
<td><div class="center">23</div>
</td>
<td><div class="center">D017</div>
</td>
<td>M7YE
</td>
<td>M6YE
</td>
<td>M5YE
</td>
<td>M4YE
</td>
<td>M3YE
</td>
<td>M2YE
</td>
<td>M1YE
</td>
<td>M0YE
</td>
<td>Sprite Y expansion
</td></tr>
<tr>
<td><div class="center">24</div>
</td>
<td><div class="center">D018</div>
</td>
<td>VM13
</td>
<td>VM12
</td>
<td>VM11
</td>
<td>VM10
</td>
<td>CB13
</td>
<td>CB12
</td>
<td>CB11
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td>Memory pointers
</td></tr>
<tr>
<td><div class="center">25</div>
</td>
<td><div class="center">D019</div>
</td>
<td>IRQ
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td>ILP
</td>
<td>IMMC
</td>
<td>IMBC
</td>
<td>IRST
</td>
<td>Interrupt register
</td></tr>
<tr>
<td><div class="center">26</div>
</td>
<td><div class="center">D01A</div>
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td>ELP
</td>
<td>EMMC
</td>
<td>EMBC
</td>
<td>ERST
</td>
<td>Interrupt enabled
</td></tr>
<tr>
<td><div class="center">27</div>
</td>
<td><div class="center">D01B</div>
</td>
<td>M7DP
</td>
<td>M6DP
</td>
<td>M5DP
</td>
<td>M4DP
</td>
<td>M3DP
</td>
<td>M2DP
</td>
<td>M1DP
</td>
<td>M0DP
</td>
<td>Sprite data priority
</td></tr>
<tr>
<td><div class="center">28</div>
</td>
<td><div class="center">D01C</div>
</td>
<td>M7MC
</td>
<td>M6MC
</td>
<td>M5MC
</td>
<td>M4MC
</td>
<td>M3MC
</td>
<td>M2MC
</td>
<td>M1MC
</td>
<td>M0MC
</td>
<td>Sprite multicolor
</td></tr>
<tr>
<td><div class="center">29</div>
</td>
<td><div class="center">D01D</div>
</td>
<td>M7XE
</td>
<td>M6XE
</td>
<td>M5XE
</td>
<td>M4XE
</td>
<td>M3XE
</td>
<td>M2XE
</td>
<td>M1XE
</td>
<td>M0XE
</td>
<td>Sprite X expansion
</td></tr>
<tr>
<td><div class="center">30</div>
</td>
<td><div class="center">D01E</div>
</td>
<td>M7M
</td>
<td>M6M
</td>
<td>M5M
</td>
<td>M4M
</td>
<td>M3M
</td>
<td>M2M
</td>
<td>M1M
</td>
<td>M0M
</td>
<td>Sprite-sprite collision
</td></tr>
<tr>
<td><div class="center">31</div>
</td>
<td><div class="center">D01F</div>
</td>
<td>M7D
</td>
<td>M6D
</td>
<td>M5D
</td>
<td>M4D
</td>
<td>M3D
</td>
<td>M2D
</td>
<td>M1D
</td>
<td>M0D
</td>
<td>Sprite-data collision
</td></tr>
<tr>
<td><div class="center">32</div>
</td>
<td><div class="center">D020</div>
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td colspan="4">
<div class="center">EC</div>
</td>
<td>Border color
</td></tr>
<tr>
<td><div class="center">33</div>
</td>
<td><div class="center">D021</div>
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td colspan="4">
<div class="center">B0C</div>
</td>
<td>Background color 0
</td></tr>
<tr>
<td><div class="center">34</div>
</td>
<td><div class="center">D022</div>
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td colspan="4">
<div class="center">B1C</div>
</td>
<td>Background color 1
</td></tr>
<tr>
<td><div class="center">35</div>
</td>
<td><div class="center">D023</div>
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td colspan="4">
<div class="center">B2C</div>
</td>
<td>Background color 2
</td></tr>
<tr>
<td><div class="center">36</div>
</td>
<td><div class="center">D024</div>
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td colspan="4">
<div class="center">B3C</div>
</td>
<td>Background color 3
</td></tr>
<tr>
<td><div class="center">37</div>
</td>
<td><div class="center">D025</div>
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td colspan="4">
<div class="center">MM0</div>
</td>
<td>Sprite multicolor 0
</td></tr>
<tr>
<td><div class="center">38</div>
</td>
<td><div class="center">D026</div>
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td colspan="4">
<div class="center">MM1</div>
</td>
<td>Sprite multicolor 1
</td></tr>
<tr>
<td><div class="center">39</div>
</td>
<td><div class="center">D027</div>
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td colspan="4">
<div class="center">M0C</div>
</td>
<td>Color sprite 0
</td></tr>
<tr>
<td><div class="center">40</div>
</td>
<td><div class="center">D028</div>
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td colspan="4">
<div class="center">M1C</div>
</td>
<td>Color sprite 1
</td></tr>
<tr>
<td><div class="center">41</div>
</td>
<td><div class="center">D029</div>
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td colspan="4">
<div class="center">M2C</div>
</td>
<td>Color sprite 2
</td></tr>
<tr>
<td><div class="center">42</div>
</td>
<td><div class="center">D02A</div>
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td colspan="4">
<div class="center">M3C</div>
</td>
<td>Color sprite 3
</td></tr>
<tr>
<td><div class="center">43</div>
</td>
<td><div class="center">D02B</div>
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td colspan="4">
<div class="center">M4C</div>
</td>
<td>Color sprite 4
</td></tr>
<tr>
<td><div class="center">44</div>
</td>
<td><div class="center">D02C</div>
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td colspan="4">
<div class="center">M5C</div>
</td>
<td>Color sprite 5
</td></tr>
<tr>
<td><div class="center">45</div>
</td>
<td><div class="center">D02D</div>
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td colspan="4">
<div class="center">M6C</div>
</td>
<td>Color sprite 6
</td></tr>
<tr>
<td><div class="center">46</div>
</td>
<td><div class="center">D02E</div>
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td data-sort-value="" style="vertical-align:middle; text-align:center" class="table-na">—
</td>
<td colspan="4">
<div class="center">M7C</div>
</td>
<td>Color sprite 7
</td></tr></tbody></table>
<div class="mw-heading mw-heading3"><h3 id="Colors">Colors</h3></div>
<p>In multicolor character mode (160×200 pixels, which most games use) characters have 4×8 pixels (the characters are still approximately square since the pixels are double width) and 4 colors out of 16 colors. Three of the colors are the same for the entire screen (the background color, multicolor 1, and multicolor 2 registers), while the remaining color can be set individually for every such 4×8 pixel area as defined in color RAM. Sprites in multicolor mode (12×21 pixels) have three colors plus transparency: two colors shared among all sprites and one individual. Artists pick shared colors such that the combination with individual colors leads to a colorful impression. Some games reload shared colors during the raster interrupt; for example, the game <i><a href="Turrican_II%3A_The_Final_Fight" title="Turrican II: The Final Fight">Turrican II's</a></i> underwater area (which was vertically distinct) has different colors. Others, such as <a href="Epyx" title="Epyx">Epyx</a>'s <i><a href="Summer_Games_(video_game)" title="Summer Games (video game)">Summer Games</a></i> and <i><a href="COMPUTE!'s_Gazette" class="mw-redirect" title="COMPUTE!'s Gazette">COMPUTE!'s Gazette</a>'</i>s <i>Basketball Sam & Ed</i>, overlay two high-resolution sprites to allow two foreground colors to be used without sacrificing horizontal resolution <a rel="nofollow" class="external autonumber" href="https://web.archive.org/web/20071001045256/http://home.arcor.de/cybergoth/gamesa/summer1interview1.html">[1]</a>. Of course, this technique reduces the number of available sprites by half.
</p><p>On <a href="PAL" title="PAL">PAL</a> C64s, the PAL <a href="Analog_delay_line" title="Analog delay line">delay line</a> in the monitor or TV which averages the color <a href="Hue" title="Hue">hue</a>, but not the brightness, of consecutive screen lines can be used to create seven nonstandard colors by alternating screen lines showing two colors of identical brightness. There are seven such pairs of colors in the VIC chip.<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup>
</p><p>
The C64's team did not spend much time on mathematically computing the 16 color palette. Robert Yannes, who was involved with the development of the VIC-II, said: </p><blockquote><p><i>I'm afraid that not nearly as much effort went into the color selection as you think. Since we had total control over hue, saturation and luminance, we picked colors that we liked. In order to save space on the chip, though, many of the colors were simply the opposite side of the color wheel from ones that we picked. This allowed us to reuse the existing resistor values, rather than having a completely unique set for each color.<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup></i></p></blockquote>
<p>Early versions of the VIC-II used in PAL C64s have a different color palette than later revisions.<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup>
</p><p>The full palette of sixteen colors is generated based on variations of <a href="YPbPr" title="YPbPr">YPbPr</a> signals as shown below:
</p>
<table class="wikitable sortable" style="border-style: none;" border="1" cellpadding="5">
<tbody><tr>
<th style="width: 135pt;">Number — name</th>
<th><a href="YPbPr" title="YPbPr">Y</a></th>
<th><a href="YPbPr" title="YPbPr">Pb</a> (rel.)</th>
<th><a href="YPbPr" title="YPbPr">Pr</a> (rel.)
</th></tr>
<tr style="color: white; background: #000;">
<td>0 — black</td>
<td>0</td>
<td>0</td>
<td>0
</td></tr>
<tr style="color: black; background: #fff;">
<td>1 — white</td>
<td>1</td>
<td>0</td>
<td>0
</td></tr>
<tr style="color: white; background: #883932;">
<td>2 — red</td>
<td>0.3125</td>
<td>−0.3826834</td>
<td>0.9238795
</td></tr>
<tr style="color: white; background: #67b6bd;">
<td>3 — cyan</td>
<td>0.625</td>
<td>0.3826834</td>
<td>−0.9238795
</td></tr>
<tr style="color: white; background: #8b3f96;">
<td>4 — purple</td>
<td>0.375</td>
<td>0.7071068</td>
<td>0.7071068
</td></tr>
<tr style="color: white; background: #55a049;">
<td>5 — green</td>
<td>0.5</td>
<td>−0.7071068</td>
<td>−0.7071068
</td></tr>
<tr style="color: white; background: #40318d;">
<td>6 — blue</td>
<td>0.25</td>
<td>1</td>
<td>0
</td></tr>
<tr style="color: black; background: #bfce72;">
<td>7 — yellow</td>
<td>0.75</td>
<td>−1</td>
<td>0
</td></tr>
<tr style="color: white; background: #8b5429;">
<td>8 — orange</td>
<td>0.375</td>
<td>−0.7071068</td>
<td>0.7071068
</td></tr>
<tr style="color: white; background: #574200;">
<td>9 — brown</td>
<td>0.25</td>
<td>−0.9238795</td>
<td>0.3826834
</td></tr>
<tr style="color: white; background: #b86962;">
<td>10 — light red</td>
<td>0.5</td>
<td>−0.3826834</td>
<td>0.9238795
</td></tr>
<tr style="color: white; background: #505050;">
<td>11 — dark grey</td>
<td>0.3125</td>
<td>0</td>
<td>0
</td></tr>
<tr style="color: white; background: #787878;">
<td>12 — medium grey</td>
<td>0.46875</td>
<td>0</td>
<td>0
</td></tr>
<tr style="color: black; background: #94e089;">
<td>13 — light green</td>
<td>0.75</td>
<td>−0.7071068</td>
<td>−0.7071068
</td></tr>
<tr style="color: white; background: #7869c4;">
<td>14 — light blue</td>
<td>0.46875</td>
<td>1</td>
<td>0
</td></tr>
<tr style="color: white; background: #9f9f9f;">
<td>15 — light grey</td>
<td>0.625</td>
<td>0</td>
<td>0
</td></tr></tbody></table>
<p><br>
</p>
<div class="mw-heading mw-heading3"><h3 id="The_VIC-IIe">The VIC-IIe</h3></div>
<p>The 8564/8566 VIC-IIe in the <a href="Commodore_128" title="Commodore 128">Commodore 128</a> uses 48 pins rather than 40, as it produces more signals, among them the clock for the additional <a href="Zilog_Z80" title="Zilog Z80">Zilog Z80</a> CPU of that computer. It also has two extra registers. One of the additional registers is for accessing the added numerical keypad and other extra keys of that computer; this function was added to the VIC merely because that proved to be the easiest place in the computer to add the necessary three extra output pins. The other extra register is for toggling between a 1 MHz and a 2 MHz system clock; at the higher speed the VIC-II's video output is merely displaying every second byte in the code as black hires bit-pattern on the screen, suggesting use of the C128's 80-column mode at that speed (via the <a href="MOS_Technology_8563" title="MOS Technology 8563">8563 VDC</a> RGB chip). Rather unofficially, the two extra registers are also available in the C128's C64 mode, permitting some use of the extra keys, as well as double-speed-no-video execution of <a href="CPU_bound" class="mw-redirect" title="CPU bound">CPU-bound</a> code (such as intensive numerical calculations) in self-made C64 programs.<sup id="cite_ref-compute128_14-0" class="reference"><a href="#cite_note-compute128-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> The extra registers are also one source of minor incompatibility between the C128's C64 mode and a real C64 - a few older C64 programs inadvertently wrote into the <span class="nowrap">2 <a href="Megahertz" class="mw-redirect" title="Megahertz">MHz</a></span> toggle bit, which would do nothing at all on a real C64, but would result in a messed-up display on a C128 in C64 mode.
</p><p>The VIC-IIe has the little-known ability to create an additional set of colors by manipulating the registers in a specific way that puts the color signal out of phase with what other parts of the chip consider it to be in. This ability was demonstrated in the "Risen from Oblivion" demo. <sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> Unfortunately it does not work on all monitors - correct colors are confirmed on Commodore CRT monitors and their equivalents.
</p><p>Using the specific behavior of the VIC-IIe's test bit, it is furthermore capable of producing a real interlace picture with a resolution of 320×400 (hires mode) and 160×400 (multicolor mode).<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="List_of_VIC-II_versions">List of VIC-II versions </h2></div>
<p>Commodore made many modifications to the VIC-II during its lifetime. <i><a href="Compute!'s_Gazette" title="Compute!'s Gazette">Compute!'s Gazette</a></i><span class="nowrap" style="padding-left:0.1em;">'</span>s first issue, in July 1983, reported that there had already been eight since the Commodore 64's release in mid-1982.<sup id="cite_ref-halfhill198307_17-0" class="reference"><a href="#cite_note-halfhill198307-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li><a href="NTSC" title="NTSC">NTSC</a>
<ul><li>MOS Technology 6566 – designed for <a href="Static_RAM" class="mw-redirect" title="Static RAM">SRAM</a>/non-<a href="Multiplexer" title="Multiplexer">muxed</a> address lines (used in the <a href="MAX_Machine" title="MAX Machine">MAX Machine</a>)</li>
<li>MOS Technology 6567 – Original NMOS version</li>
<li>MOS Technology 8562 – HMOS-II version</li>
<li>MOS Technology 8564 – VIC-II E C128 version</li></ul></li></ul>
<ul><li><a href="PAL" title="PAL">PAL</a>
<ul><li>MOS Technology 6569 – (<a href="PAL#PAL-B/G/D/K/I" title="PAL">PAL-B</a>, used in most PAL countries)</li>
<li>MOS Technology 6572 – (<a href="PAL#PAL-N_(Argentina,_Paraguay_and_Uruguay)" title="PAL">PAL-N</a>, used in southern South America only)</li>
<li>MOS Technology 6573 – (<a href="PAL#PAL-M_(Brazil)" title="PAL">PAL-M</a>, used in Brazil only)</li>
<li>MOS Technology 8565 – HMOS-II version for "C64E" motherboards</li>
<li>MOS Technology 8566 – VIC-II E (PAL-B) C128 version</li>
<li>MOS Technology 8569 – VIC-II E (PAL-N) C128 version</li></ul></li></ul>
<p>The earliest revision of the VIC-II was used in machines made during 1982 and early 1983; it had a ceramic shell for thermal reasons and generated 64 NTSC color clocks per line. These chips also did not output separated chroma and luminance signals. Later revisions had a lower cost plastic shell and 65 color clocks per line (for NTSC, 63 for PAL), as well as separated chroma and luminance, allowing for an early form of S-video. Several revisions were made chiefly in the interest of improving video output quality, which was poor on the early units, and eliminating a bug that would cause random pixels to appear on screen (a few early games intentionally exploited this for graphics effects that consequently did not work on later C64s). The 64 color clocks on the initial VIC-II was done with the intention of allowing NTSC artifact color in high resolution bitmap mode as the Atari 8-bit computers did, but that idea was quickly dropped.
</p><p>Because it was necessary for cost reasons to switch to a plastic shell, overheating tended to be a problem with the VIC-II. This was for several reasons including the high density of the die relative to the process used, and its high internal speed (8 MHz). Commodore tried an impromptu solution for this by using the aluminum <a href="RF_shield" class="mw-redirect" title="RF shield">RF shield</a> as a heat sink (on NTSC machines; PAL machines were sold in countries with less restrictive RF interference standards than the United States and so only used aluminized cardboard), however it was not entirely effective at preventing overheating and chip failure.
</p><p>The 85xx VIC-II used in C64Cs was made with the more modern 3.5 <a href="Micrometre" title="Micrometre">μm</a> HMOS process and requires only a single 5V power rail instead of the dual 12V and 5V rails of the 65xx VIC-II. These chips run significantly cooler and do not suffer from the overheating issues that affect the 65xx VIC-II.
</p><p>Several revisions of 6569 exist: 6569R1 (usually gold plated), 6569R3, 6569R4 and 6569R5. The most common version of 8565 is 8565R2.
</p>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Video_Display_Controller" class="mw-redirect" title="Video Display Controller">Video Display Controller</a></li>
<li><a href="Motorola_6847" title="Motorola 6847">Motorola 6847</a></li>
<li><a href="List_of_home_computers_by_video_hardware" title="List of home computers by video hardware">List of home computers by video hardware</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<div class="mw-references-wrap mw-references-columns"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFPierceall" class="citation web cs1">Pierceall, Kimberly. <a rel="nofollow" class="external text" href="https://www.pilotonline.com/business/article_0da0c8f0-5199-50c0-8398-0a751a7e6467.html">"Turns out, the leader of the Commodore 64 engineering team retired to Yorktown"</a>. <i>pilotonline.com</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-10-12</span></span>.</cite></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><cite id="CITEREFBagnall2005" class="citation book cs1">Bagnall, Brian (2005). "The Secret Project 1981". <i>On the Edge: The Spectacular Rise and Fall of Commodore</i> (1 ed.). Winnipeg, Manitoba: Variant Press. pp. <span class="nowrap">224–</span>225. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-9738649-0-7</bdi>.</cite></span>
</li>
<li id="cite_note-IEEE1985-3"><span class="mw-cite-backlink">^ <a href="#cite_ref-IEEE1985_3-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-IEEE1985_3-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFPerryWallich1985" class="citation journal cs1">Perry, Tekla S.; Wallich, Paul (March 1985). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20120513181613/http://spectrum.ieee.org/ns/pdfs/commodore64_mar1985.pdf">"Design case history: the Commodore 64"</a> <span class="cs1-format">(PDF)</span>. <i>IEEE Spectrum</i>. <b>22</b> (3). New York, New York: <a href="Institute_of_Electrical_and_Electronics_Engineers" title="Institute of Electrical and Electronics Engineers">Institute of Electrical and Electronics Engineers</a>: <span class="nowrap">48–</span>58. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FMSPEC.1985.6370590">10.1109/MSPEC.1985.6370590</a>. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0018-9235">0018-9235</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:11900865">11900865</a>. Archived from <a rel="nofollow" class="external text" href="https://spectrum.ieee.org/ns/pdfs/commodore64_mar1985.pdf">the original</a> <span class="cs1-format">(PDF)</span> on May 13, 2012<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-11-12</span></span>.</cite></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite id="CITEREFBagnall2005" class="citation book cs1">Bagnall, Brian (2005). "The Secret Project 1981". <i>On the Edge: The Spectacular Rise and Fall of Commodore</i> (1 ed.). Winnipeg, Manitoba: Variant Press. p. 227. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-9738649-0-7</bdi>.</cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite id="CITEREFBagnall2005" class="citation book cs1">Bagnall, Brian (2005). "The Secret Project 1981". <i>On the Edge: The Spectacular Rise and Fall of Commodore</i> (1 ed.). Winnipeg, Manitoba: Variant Press. p. 229. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-9738649-0-7</bdi>.</cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite id="CITEREFBagnall2005" class="citation book cs1">Bagnall, Brian (2005). "The Secret Project 1981". <i>On the Edge: The Spectacular Rise and Fall of Commodore</i> (1 ed.). Winnipeg, Manitoba: Variant Press. p. 230. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-9738649-0-7</bdi>.</cite></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><cite id="CITEREFBagnall2005" class="citation book cs1">Bagnall, Brian (2005). "The Secret Project 1981". <i>On the Edge: The Spectacular Rise and Fall of Commodore</i> (1 ed.). Winnipeg, Manitoba: Variant Press. p. 242. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-9738649-0-7</bdi>.</cite></span>
</li>
<li id="cite_note-Yakal198606-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-Yakal198606_8-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFYakal1986" class="citation magazine cs1">Yakal, Kathy (June 1986). <a rel="nofollow" class="external text" href="https://archive.org/details/1986-06-computegazette/page/n35">"The Evolution of Commodore Graphics"</a>. <i>Compute!'s Gazette</i>. pp. <span class="nowrap">34–</span>42<span class="reference-accessdate">. Retrieved <span class="nowrap">2019-06-18</span></span>.</cite></span>
</li>
<li id="cite_note-map128-9"><span class="mw-cite-backlink">^ <a href="#cite_ref-map128_9-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-map128_9-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-map128_9-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-map128_9-3"><sup><i><b>d</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFCowper1986" class="citation book cs1">Cowper, Ottis R. (1986). <a rel="nofollow" class="external text" href="https://archive.org/stream/Compute_s_Mapping_the_Commodore_128#page/n0/mode/2up"><i>Mapping the Commodore 128</i></a>. Greensboro, North Carolina: COMPUTE! Books. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-87455-060-2</bdi>.</cite></span>
</li>
<li id="cite_note-vicspec-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-vicspec_10-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://archive.6502.org/datasheets/mos_6567_vic_ii_preliminary.pdf">"6567 Video Interface Chip: Specification Sheet"</a> <span class="cs1-format">(PDF)</span>. Commodore Semiconductor Group. sheets 2 and 5.</cite></span>
</li>
<li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://kodiak64.com/blog/luma-driven-graphics-on-c64">"Luma-Driven Graphics on the C64"</a>.</cite></span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><cite id="CITEREFTimmermann" class="citation web cs1">Timmermann, Philip. <a rel="nofollow" class="external text" href="http://www.pepto.de/projects/colorvic/2001/">"Commodore VIC-II Color Analysis (Preview)"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">11 February</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text"><cite id="CITEREFSjöstedt2016" class="citation web cs1">Sjöstedt, Ilkka (30 March 2016). <a rel="nofollow" class="external text" href="https://ilesj.wordpress.com/2016/03/30/old-vic-ii-colors-and-color-blending/">"Old VIC-II Colors and Color Blending"</a>. <i>ilesj's blog</i><span class="reference-accessdate">. Retrieved <span class="nowrap">11 February</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-compute128-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-compute128_14-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFCowper,_Ottis_R.Florance,_DavidHeimarck,_Todd_D.Krause,_John1985" class="citation book cs1">Cowper, Ottis R.; Florance, David; Heimarck, Todd D.; Krause, John; Miller, George W.; Mykytyn, Kevin; Nelson, Philip I.; Victor, Tim (October 1985). "Chapter 7. System Architecture". <i>COMPUTE!'s 128 Programmer's Guide</i>. Greensboro, North Carolina: <a href="Compute!" title="Compute!">COMPUTE! Publications</a>. pp. <span class="nowrap">348–</span>349. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-87455-031-9</bdi>.</cite></span>
</li>
<li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://csdb.dk/release/?id=2942&show=trivia#trivia">"Risen from Oblivion - trivia"</a>.</cite></span>
</li>
<li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://sites.google.com/site/h2obsession/CBM/C128/Interlace">"VIC-IIe Interlace"</a>.</cite></span>
</li>
<li id="cite_note-halfhill198307-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-halfhill198307_17-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFHalfhill,_Tom_R.1983" class="citation news cs1">Halfhill, Tom R. (July 1983). <a rel="nofollow" class="external text" href="https://archive.org/stream/1983-07-computegazette/Compute_Gazette_Issue_01_1983_Jul#page/n41/mode/2up">"Commodore 64 Video Update"</a>. <i>Compute!'s Gazette</i>. p. 40<span class="reference-accessdate">. Retrieved <span class="nowrap">6 February</span> 2016</span>.</cite></span>
</li>
</ol></div>
<ul><li><cite class="citation book cs1">"Appendix N: 6566/6567 (VIC-II) Chip Specifications". <a rel="nofollow" class="external text" href="http://www.commodore.ca/manuals/c64_programmers_reference/c64-programmers_reference_guide-07-appendices.pdf"><i>Commodore 64 Programmer's Reference Guide</i></a> <span class="cs1-format">(PDF)</span> (1 ed.). <a href="Commodore_Business_Machines" class="mw-redirect" title="Commodore Business Machines">Commodore Business Machines</a>. 1982. pp. <span class="nowrap">436–</span>456. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-672-22056-3</bdi>.</cite></li></ul>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://www.cebix.net/VIC-Article.txt">The MOS 6567/6569 video controller (VIC-II) and its application in the Commodore 64</a> - detailed hardware description of the VIC-II.</li>
<li><a rel="nofollow" class="external text" href="http://unusedino.de/ec64/technical/misc/vic656x/colors/index.html">Commodore VIC-II Color Analysis (Preview)</a> - an attempt to provide accurate information as to the VIC-II color palette, by Philip Timmermann.</li>
<li><a rel="nofollow" class="external text" href="http://www.studiostyle.sk/dmagic/gallery/gfxmodes.htm">Description of C64 graphics modes</a> - simple explanations with example pictures of the common modes used for C64 graphics, including hacked and software-assisted modes.</li>
<li><a rel="nofollow" class="external text" href="https://sites.google.com/site/h2obsession/CBM/C128/Interlace">Real Interlace video modes</a> using the VIC-IIe.</li>
<li><a rel="nofollow" class="external text" href="http://codebase64.org/doku.php?id=base:vic">VIC programming information</a> on Codebase64.</li>
<li><a rel="nofollow" class="external text" href="http://visual6502.org/images/pages/Commodore_8565_die_shots.html">VIC-II die shots</a></li>
<li><a rel="nofollow" class="external text" href="http://hitmen.c02.at/temp/palstuff/">Accurately reproducing the Video Output of a Commodore C64</a> - VIC-II palette as seen on PAL and NTSC displays; calculation of pixel aspect ratios</li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Video/sound_chips_from_MOS_Technology_and_second_source/clone_vendors140" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div id="Video/sound_chips_from_MOS_Technology_and_second_source/clone_vendors140" style="font-size:114%;margin:0 4em"><a href="Video_display_controller" title="Video display controller">Video</a>/<a href="Sound_chip" title="Sound chip">sound</a> <a href="Integrated_circuit" title="Integrated circuit">chips</a> from <a href="MOS_Technology" title="MOS Technology">MOS Technology</a> and second source/clone vendors</div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Motorola_6845" title="Motorola 6845">6545 CRTC</a></li>
<li><a href="MOS_Technology_VIC" title="MOS Technology VIC">6560 VIC</a></li>
<li><a href="MOS_Technology_6581" title="MOS Technology 6581">6581 SID</a></li>
<li><a href="MOS_Technology_TED" title="MOS Technology TED">7360 TED</a></li>
<li><a href="MOS_Technology_8563" title="MOS Technology 8563">8563 VDC</a></li>
<li><a href="MOS_Technology_8568" title="MOS Technology 8568">8568 VDC</a></li></ul>
</div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-05-26" href="https://en.wikipedia.org/wiki/?title=MOS_Technology_VIC-II&oldid=1292409028">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>